---
id: 655a4ffc762d117470b94e3b
title: Step 37
challengeType: 20
dashedName: step-37
---

# --description--

If neither one of the previous conditions is met, it means the node has both left and right children.

To choose the successor, you need to find the minimum value in the right subtree. The smallest value will be the in-order successor of the current node.

Later on, you are going to define a helper method called `_min_value` that finds the smallest value in a given subtree.

For now, add a `_min_value` call after your `elif` block, passing `node.right` as the argument. Assign it to the current node key.

# --hints--

You should assign `self._min_value(node.right)` to `node.key` after your `elif` block.

```js
assert.match(code, /node\.key\s*=\s*self\._min_value\(\s*node\.right\s*\)/);
```

# --seed--

## --seed-contents--

```py
class TreeNode:
    def __init__(self, key):
        self.key = key
        self.left = None
        self.right = None

class BinarySearchTree:
    def __init__(self):
        self.root = None

    def insert(self,key):
        self.root = self._insert(self.root, key)

    def _insert(self, node, key):
        if node is None:
            return TreeNode(key)
        if key < node.key:
            node.left = self._insert(node.left, key)
        elif key > node.key:
            node.right = self._insert(node.right, key)
        return node

    def search(self, key):
        return self._search(self.root, key)

    def _search(self, node, key):
        if node is None or node.key == key:
            return node
        if key < node.key:
            return self._search(node.left, key)
        return self._search(node.right, key)

    def delete(self, key):
        self.root = self._delete(self.root, key)

    def _delete(self, node, key):
        if node is None:
            return node
        if key < node.key:
            node.left = self._delete(node.left, key)
        elif key > node.key:
            node.right = self._delete(node.right, key)
--fcc-editable-region--
        else:
            if node.left is None:
                return node.right
            elif node.right is None:
                return node.left                
--fcc-editable-region--
```
